Setup

Packages

# Packages
require(ggplot2)
require(plotly)
Loading required package: plotly
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     

Attaching package: 㤼㸱plotly㤼㸲

The following object is masked from 㤼㸱package:ggplot2㤼㸲:

    last_plot

The following object is masked from 㤼㸱package:stats㤼㸲:

    filter

The following object is masked from 㤼㸱package:graphics㤼㸲:

    layout
require(geojsonio)
Loading required package: geojsonio
package 㤼㸱geojsonio㤼㸲 was built under R version 4.0.3
Attaching package: 㤼㸱geojsonio㤼㸲

The following object is masked from 㤼㸱package:base㤼㸲:

    pretty
require(sp)
Loading required package: sp
package 㤼㸱sp㤼㸲 was built under R version 4.0.3
require(sf)
Loading required package: sf
package 㤼㸱sf㤼㸲 was built under R version 4.0.3Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1
require(rvest)
Loading required package: rvest
Loading required package: xml2
require(RSelenium)
Loading required package: RSelenium
package 㤼㸱RSelenium㤼㸲 was built under R version 4.0.3
require(htmltools)
Loading required package: htmltools
require(ggmap)
Loading required package: ggmap
package 㤼㸱ggmap㤼㸲 was built under R version 4.0.3Google's Terms of Service: https://cloud.google.com/maps-platform/terms/.
Please cite ggmap if you use it! See citation("ggmap") for details.

Attaching package: 㤼㸱ggmap㤼㸲

The following object is masked from 㤼㸱package:plotly㤼㸲:

    wind

Data

# Download file for state info

url = "https://opendata.arcgis.com/datasets/5f45e1ece6e14ef5866974a7b57d3b95_1.geojson"

file = "NJ_counties.geojson"

download.file(url,file)

rm(url)
# Convert file to sf object 

file = "NJ_counties.geojson"

NJ_Counties <-
  geojson_sf(file)
rm(file)
# Clean Data 

NJ_Counties_Cleaned <- 
  NJ_Counties %>%
  transmute(
    county = COUNTY,
    CO = CO,
    pop = POP2010,
    popdensity = POPDEN2010,
    Shape_Length = Shape_Length,
    Shape_Area = Shape_Area,
    GNIS = GNIS
  )
#get page source from website

gc()
driver <- rsDriver(browser = c("firefox"), port = 44454L)
remote_driver <- driver[["client"]] 
remote_driver$navigate("https://www.childrens-specialized.org/locations-directory/?")

page <- remote_driver$getPageSource()
# Retrieve information from directory

Xpathgen1 = "/html/body/div[1]/div/div/div[2]/div/div[2]/div["

Xpathgen2 = "]/div/div[2]/article"

Hosinfo <- data.frame()

for (i in 1:15){
  XPath <- paste(Xpathgen1,i,Xpathgen2,sep = "")
  Node <- page[[1]] %>% 
    read_html() %>%
    html_nodes(xpath = XPath)
  name <-
    Node[[1]] %>%
    html_node("h2") %>%
    html_text()
  address <-
    Node[[1]] %>%
    html_node("h3") %>%
    html_text() %>%
    gsub(pattern = "\n *",replacement = " ", x = .)
  for (i in 1:7){
  XPathday <- paste(XPath,"/div[",i,"]",sep = "")
  day <- page[[1]] %>% 
    read_html() %>%
    html_nodes(xpath = XPathday) %>%
    html_attr("class") %>%
    grep("-Hours",x = .,value = TRUE) %>%
    gsub("-Hours","",x = .)
  times <-
    page[[1]] %>% 
    read_html() %>%
    html_nodes(xpath = XPathday) %>%
    html_node("h3") %>%
    html_text()
  assign(day,times)
  }
  row = data.frame(name,address,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday)
  Hosinfo <-  rbind(Hosinfo,row)
}

# Write csv file 

write.csv(Hosinfo, "Hospitals.csv")
# Data Wrangling

Hosinfo <- read.csv("Hospitals.csv")

pattern <- "([0-1]*[0-9]:[0-5][0-9] *[AaPp][Mm][-to ]+[0-1]*[0-9]:[0-5][0-9] *[AaPp][Mm])" # Pattern to extract first time range

Hosloc <- 
  Hosinfo %>%
  select(name,address) %>%
  mutate_geocode(address) # Requires google API key

rm(pattern)

write.csv(Hosloc,"Hospitalsloc.csv")

Graphs

# Map of NJ 

NJ <-
  NJ_Counties_Cleaned %>%
  ggplot() +
  geom_sf() +
  theme(legend.position = "None") +
  theme(axis.ticks = element_blank(),
        axis.text = element_blank(),
        title = element_text(size = 9)) +
  labs(y = "",
       x = "",
       title = "Map of NJ divided by county")

ggplotly(NJ)

NJ

plot(NJ_Counties_Cleaned)

# Population heat maps of NJ using 2010 population data

NJ <-
  NJ_Counties_Cleaned %>%
  ggplot() +
  scale_fill_gradientn(colours=c("white", "blue")) +
  geom_sf(aes(fill = pop)) +
  theme(legend.position = "None") +
  theme(axis.ticks = element_blank(),
        axis.text = element_blank(),
        title = element_text(size = 9)) +
  labs(y = "",
       x = "",
       title = "2010 Population Heatmap")


ggplotly(NJ)

NJ

plot(NJ_Counties_Cleaned["pop"])


# Location of Hospitals in NJ on heatmap

Hosloc <- read.csv("Hospitalsloc.csv")

# Only need out patient centers 

Hosloc <-
  Hosloc %>%
  filter(grepl("Outpatient", name))


NJ <-
  NJ_Counties_Cleaned %>%
  ggplot() +
  scale_fill_gradientn(colours=c("white", "steelblue")) +
  geom_sf(aes(fill = pop)) +
  geom_point(data = Hosloc,aes(x = lon,y = lat,shape = "square", label = name,color = "orange")) +
  theme(legend.position = "None") +
  theme(axis.ticks = element_blank(),
        axis.text = element_blank(),
        title = element_text(size = 9, family = "serif")) +
  labs(y = "",
       x = "",
       title = "2010 Population Heatmap\nwith CSH Outpatient Center")
Ignoring unknown aesthetics: label
ggplotly(NJ,tooltip = "name")

NJ

NJ %>%
ggsave(file="PopheatmapNJ.png", plot = ., width=3, height=4, dpi=300)

LS0tDQp0aXRsZTogIkdlb2pzb24gVGVzdGluZyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMjIyBTZXR1cA0KDQojIyMjIFBhY2thZ2VzDQoNCmBgYHtyfQ0KIyBQYWNrYWdlcw0KcmVxdWlyZShnZ3Bsb3QyKQ0KcmVxdWlyZShwbG90bHkpDQpyZXF1aXJlKGdlb2pzb25pbykNCnJlcXVpcmUoc3ApDQpyZXF1aXJlKHNmKQ0KcmVxdWlyZShydmVzdCkNCnJlcXVpcmUoUlNlbGVuaXVtKQ0KcmVxdWlyZShodG1sdG9vbHMpDQpyZXF1aXJlKGdnbWFwKQ0KYGBgDQoNCiMjIyMgRGF0YQ0KDQoNCmBgYHtyfQ0KIyBEb3dubG9hZCBmaWxlIGZvciBzdGF0ZSBpbmZvDQoNCnVybCA9ICJodHRwczovL29wZW5kYXRhLmFyY2dpcy5jb20vZGF0YXNldHMvNWY0NWUxZWNlNmUxNGVmNTg2Njk3NGE3YjU3ZDNiOTVfMS5nZW9qc29uIg0KDQpmaWxlID0gIk5KX2NvdW50aWVzLmdlb2pzb24iDQoNCmRvd25sb2FkLmZpbGUodXJsLGZpbGUpDQoNCnJtKHVybCkNCmBgYA0KDQpgYGB7cn0NCiMgQ29udmVydCBmaWxlIHRvIHNmIG9iamVjdCANCg0KZmlsZSA9ICJOSl9jb3VudGllcy5nZW9qc29uIg0KDQpOSl9Db3VudGllcyA8LQ0KICBnZW9qc29uX3NmKGZpbGUpDQpybShmaWxlKQ0KYGBgDQoNCmBgYHtyfQ0KIyBDbGVhbiBEYXRhIA0KDQpOSl9Db3VudGllc19DbGVhbmVkIDwtIA0KICBOSl9Db3VudGllcyAlPiUNCiAgdHJhbnNtdXRlKA0KICAgIGNvdW50eSA9IENPVU5UWSwNCiAgICBDTyA9IENPLA0KICAgIHBvcCA9IFBPUDIwMTAsDQogICAgcG9wZGVuc2l0eSA9IFBPUERFTjIwMTAsDQogICAgU2hhcGVfTGVuZ3RoID0gU2hhcGVfTGVuZ3RoLA0KICAgIFNoYXBlX0FyZWEgPSBTaGFwZV9BcmVhLA0KICAgIEdOSVMgPSBHTklTDQogICkNCmBgYA0KDQoNCmBgYHtyfQ0KI2dldCBwYWdlIHNvdXJjZSBmcm9tIHdlYnNpdGUNCg0KZ2MoKQ0KZHJpdmVyIDwtIHJzRHJpdmVyKGJyb3dzZXIgPSBjKCJmaXJlZm94IiksIHBvcnQgPSA0NDQ1NEwpDQpyZW1vdGVfZHJpdmVyIDwtIGRyaXZlcltbImNsaWVudCJdXSANCnJlbW90ZV9kcml2ZXIkbmF2aWdhdGUoImh0dHBzOi8vd3d3LmNoaWxkcmVucy1zcGVjaWFsaXplZC5vcmcvbG9jYXRpb25zLWRpcmVjdG9yeS8/IikNCg0KcGFnZSA8LSByZW1vdGVfZHJpdmVyJGdldFBhZ2VTb3VyY2UoKQ0KYGBgDQoNCmBgYHtyfQ0KIyBSZXRyaWV2ZSBpbmZvcm1hdGlvbiBmcm9tIGRpcmVjdG9yeQ0KDQpYcGF0aGdlbjEgPSAiL2h0bWwvYm9keS9kaXZbMV0vZGl2L2Rpdi9kaXZbMl0vZGl2L2RpdlsyXS9kaXZbIg0KDQpYcGF0aGdlbjIgPSAiXS9kaXYvZGl2WzJdL2FydGljbGUiDQoNCkhvc2luZm8gPC0gZGF0YS5mcmFtZSgpDQoNCmZvciAoaSBpbiAxOjE1KXsNCiAgWFBhdGggPC0gcGFzdGUoWHBhdGhnZW4xLGksWHBhdGhnZW4yLHNlcCA9ICIiKQ0KICBOb2RlIDwtIHBhZ2VbWzFdXSAlPiUgDQogICAgcmVhZF9odG1sKCkgJT4lDQogICAgaHRtbF9ub2Rlcyh4cGF0aCA9IFhQYXRoKQ0KICBuYW1lIDwtDQogICAgTm9kZVtbMV1dICU+JQ0KICAgIGh0bWxfbm9kZSgiaDIiKSAlPiUNCiAgICBodG1sX3RleHQoKQ0KICBhZGRyZXNzIDwtDQogICAgTm9kZVtbMV1dICU+JQ0KICAgIGh0bWxfbm9kZSgiaDMiKSAlPiUNCiAgICBodG1sX3RleHQoKSAlPiUNCiAgICBnc3ViKHBhdHRlcm4gPSAiXG4gKiIscmVwbGFjZW1lbnQgPSAiICIsIHggPSAuKQ0KICBmb3IgKGkgaW4gMTo3KXsNCiAgWFBhdGhkYXkgPC0gcGFzdGUoWFBhdGgsIi9kaXZbIixpLCJdIixzZXAgPSAiIikNCiAgZGF5IDwtIHBhZ2VbWzFdXSAlPiUgDQogICAgcmVhZF9odG1sKCkgJT4lDQogICAgaHRtbF9ub2Rlcyh4cGF0aCA9IFhQYXRoZGF5KSAlPiUNCiAgICBodG1sX2F0dHIoImNsYXNzIikgJT4lDQogICAgZ3JlcCgiLUhvdXJzIix4ID0gLix2YWx1ZSA9IFRSVUUpICU+JQ0KICAgIGdzdWIoIi1Ib3VycyIsIiIseCA9IC4pDQogIHRpbWVzIDwtDQogICAgcGFnZVtbMV1dICU+JSANCiAgICByZWFkX2h0bWwoKSAlPiUNCiAgICBodG1sX25vZGVzKHhwYXRoID0gWFBhdGhkYXkpICU+JQ0KICAgIGh0bWxfbm9kZSgiaDMiKSAlPiUNCiAgICBodG1sX3RleHQoKQ0KICBhc3NpZ24oZGF5LHRpbWVzKQ0KICB9DQogIHJvdyA9IGRhdGEuZnJhbWUobmFtZSxhZGRyZXNzLE1vbmRheSxUdWVzZGF5LFdlZG5lc2RheSxUaHVyc2RheSxGcmlkYXksU2F0dXJkYXksU3VuZGF5KQ0KICBIb3NpbmZvIDwtICByYmluZChIb3NpbmZvLHJvdykNCn0NCg0Kcm0ocm93LFhwYXRoZ2VuMSxYcGF0aGdlbjIsWFBhdGgsWFBhdGhkYXksaSxuYW1lKQ0KDQojIFdyaXRlIGNzdiBmaWxlIA0KDQp3cml0ZS5jc3YoSG9zaW5mbywgIkhvc3BpdGFscy5jc3YiKQ0KYGBgDQoNCmBgYHtyfQ0KIyBEYXRhIFdyYW5nbGluZw0KDQpIb3NpbmZvIDwtIHJlYWQuY3N2KCJIb3NwaXRhbHMuY3N2IikNCg0KcGF0dGVybiA8LSAiKFswLTFdKlswLTldOlswLTVdWzAtOV0gKltBYVBwXVtNbV1bLXRvIF0rWzAtMV0qWzAtOV06WzAtNV1bMC05XSAqW0FhUHBdW01tXSkiICMgUGF0dGVybiB0byBleHRyYWN0IGZpcnN0IHRpbWUgcmFuZ2UNCg0KSG9zbG9jIDwtIA0KICBIb3NpbmZvICU+JQ0KICBzZWxlY3QobmFtZSxhZGRyZXNzKSAlPiUNCiAgbXV0YXRlX2dlb2NvZGUoYWRkcmVzcykgIyBSZXF1aXJlcyBnb29nbGUgQVBJIGtleQ0KDQpybShwYXR0ZXJuKQ0KDQp3cml0ZS5jc3YoSG9zbG9jLCJIb3NwaXRhbHNsb2MuY3N2IikNCg0KYGBgDQoNCg0KIyMjIEdyYXBocyANCg0KYGBge3J9DQojIE1hcCBvZiBOSiANCg0KTkogPC0NCiAgTkpfQ291bnRpZXNfQ2xlYW5lZCAlPiUNCiAgZ2dwbG90KCkgKw0KICBnZW9tX3NmKCkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiTm9uZSIpICsNCiAgdGhlbWUoYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICB0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gOSkpICsNCiAgbGFicyh5ID0gIiIsDQogICAgICAgeCA9ICIiLA0KICAgICAgIHRpdGxlID0gIk1hcCBvZiBOSiBkaXZpZGVkIGJ5IGNvdW50eSIpDQoNCmdncGxvdGx5KE5KKQ0KTkoNCnBsb3QoTkpfQ291bnRpZXNfQ2xlYW5lZCkNCmBgYA0KDQoNCg0KYGBge3J9DQojIFBvcHVsYXRpb24gaGVhdCBtYXBzIG9mIE5KIHVzaW5nIDIwMTAgcG9wdWxhdGlvbiBkYXRhDQoNCk5KIDwtDQogIE5KX0NvdW50aWVzX0NsZWFuZWQgJT4lDQogIGdncGxvdCgpICsNCiAgc2NhbGVfZmlsbF9ncmFkaWVudG4oY29sb3Vycz1jKCJ3aGl0ZSIsICJibHVlIikpICsNCiAgZ2VvbV9zZihhZXMoZmlsbCA9IHBvcCkpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIk5vbmUiKSArDQogIHRoZW1lKGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgdGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDkpKSArDQogIGxhYnMoeSA9ICIiLA0KICAgICAgIHggPSAiIiwNCiAgICAgICB0aXRsZSA9ICIyMDEwIFBvcHVsYXRpb24gSGVhdG1hcCIpDQoNCg0KZ2dwbG90bHkoTkopDQpOSg0KcGxvdChOSl9Db3VudGllc19DbGVhbmVkWyJwb3AiXSkNCmBgYA0KDQoNCmBgYHtyfQ0KDQojIExvY2F0aW9uIG9mIEhvc3BpdGFscyBpbiBOSiBvbiBoZWF0bWFwDQoNCkhvc2xvYyA8LSByZWFkLmNzdigiSG9zcGl0YWxzbG9jLmNzdiIpDQoNCiMgT25seSBuZWVkIG91dCBwYXRpZW50IGNlbnRlcnMgDQoNCkhvc2xvYyA8LQ0KICBIb3Nsb2MgJT4lDQogIGZpbHRlcihncmVwbCgiT3V0cGF0aWVudCIsIG5hbWUpKQ0KDQoNCk5KIDwtDQogIE5KX0NvdW50aWVzX0NsZWFuZWQgJT4lDQogIGdncGxvdCgpICsNCiAgc2NhbGVfZmlsbF9ncmFkaWVudG4oY29sb3Vycz1jKCJ3aGl0ZSIsICJzdGVlbGJsdWUiKSkgKw0KICBnZW9tX3NmKGFlcyhmaWxsID0gcG9wKSkgKw0KICBnZW9tX3BvaW50KGRhdGEgPSBIb3Nsb2MsYWVzKHggPSBsb24seSA9IGxhdCxzaGFwZSA9ICJzcXVhcmUiLCBsYWJlbCA9IG5hbWUsY29sb3IgPSAib3JhbmdlIikpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIk5vbmUiKSArDQogIHRoZW1lKGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgdGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhbWlseSA9ICJzZXJpZiIpKSArDQogIGxhYnMoeSA9ICIiLA0KICAgICAgIHggPSAiIiwNCiAgICAgICB0aXRsZSA9ICIyMDEwIFBvcHVsYXRpb24gSGVhdG1hcFxud2l0aCBDU0ggT3V0cGF0aWVudCBDZW50ZXIiKQ0KZ2dwbG90bHkoTkosdG9vbHRpcCA9ICJuYW1lIikNCk5KDQoNCk5KICU+JQ0KZ2dzYXZlKGZpbGU9IlBvcGhlYXRtYXBOSi5wbmciLCBwbG90ID0gLiwgd2lkdGg9MywgaGVpZ2h0PTQsIGRwaT0zMDApDQoNCmBgYA0KDQo=